﻿using Newtonsoft.Json;
using System;
using System.Collections.Generic;

#nullable disable

namespace ZH.GPT.Domains.Completions.Response
{
    /// <summary>
    /// 输出
    /// </summary>
    public partial class ResultPDTO
    {
        /// <summary>
        /// ID
        /// </summary>
        public string id { get; set; }

        /// <summary>
        /// 
        /// </summary>
        public string Object { get; set; }

        /// <summary>
        /// 
        /// </summary>
        public string created { get; set; }
        /// <summary>
        /// 机器人模型
        /// </summary>
        public string model { get; set; }
        /// <summary>
        /// 消息体
        /// </summary>
        public List<ChoicesPDTO> choices { get; set; }
        /// <summary>
        /// token使用情况
        /// </summary>
        public ChoicesUsagePDTO usage { get; set; }
        /// <summary>
        /// ToString
        /// </summary>
        /// <returns></returns>
        public override string ToString() => JsonConvert.SerializeObject(this);
    }

    /// <summary>
    /// 输出
    /// </summary>
    public partial class ChoicesPDTO
    {
        /// <summary>
        /// 位置
        /// </summary>
        public int index { get; set; }
        /// <summary>
        /// 消息体
        /// </summary>
        public ChoicesMessagePDTO message { get; set; }
        /// <summary>
        /// 响应说明
        /// stop	API返回完整的模型输出
        /// length	由于max_tokens参数或令牌限制而导致的不完整模型输出
        /// content_filter	由于我们的内容过滤器的标志而省略的内容
        /// null	API响应仍在进行中或不完整
        /// </summary>
        public string finish_reason { get; set; }
    }

    /// <summary>
    /// 输出
    /// </summary>
    public partial class ChoicesMessagePDTO
    {
        /// <summary>
        /// 类型
        /// system	设置chatgpt的角色。
        /// user	消息是 给chatgpt提交的我们的问题。
        /// assistant	消息 是chatgpt给返回的消息。
        /// </summary>
        public string role { get; set; }
        /// <summary>
        /// 消息
        /// </summary>
        public string content { get; set; }
    }

    /// <summary>
    /// Usage
    /// </summary>
    public partial class ChoicesUsagePDTO
    {
        /// <summary>
        /// 表示消息输入中使用的token数目，即API请求时消息的token数目。
        /// </summary>
        public int prompt_tokens { get; set; }
        /// <summary>
        /// 表示API返回的响应消息中使用的token数目，即模型预测生成的响应消息的token数目。
        /// </summary>
        public int completion_tokens { get; set; }
        /// <summary>
        /// 表示整个API调用过程中使用的总token数目，包括输入和输出的所有token数目。
        /// </summary>
        public int total_tokens { get; set; }
    }
}
